#include <stdio.h>

/*
 * 给定一个长度为 n 的整数数组 height 。有 n 条垂线，第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
 * 找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。
 * 返回容器可以储存的最大水量。
 *
 * 示例 1：
 *   输入：[1,8,6,2,5,4,8,3,7]
 *   输出：49
 *
 * 示例 2：
 *   输入：height = [1,1]
 *   输出：1
 */

int maxArea(int *height, int heightSize)
{
    int *headPtr = height, *tailPtr = height + heightSize - 1;
    int ret = 0, currS = 0;
    int *prePtr = *headPtr > *tailPtr ? tailPtr : headPtr;
    while (headPtr != tailPtr)
    {
        if (*headPtr >= *tailPtr)
        {
            currS = (tailPtr - headPtr) * *tailPtr;
            prePtr = tailPtr;
            while (headPtr != --tailPtr && *prePtr >= *tailPtr);
            
        }
        else
        {
            currS = (tailPtr - headPtr) * *headPtr;
            prePtr = headPtr;
            while (++headPtr != tailPtr && *headPtr < *prePtr);
        }
        if (currS > ret)
        {
            ret = currS;
        }
    }
    return ret;
}

int main()
{
    // int a[9];
    // a[0] = 1;
    // a[1] = 8;
    // a[2] = 6;
    // a[3] = 2;
    // a[4] = 5;
    // a[5] = 4;
    // a[6] = 8;
    // a[7] = 3;
    // a[8] = 7;
    // printf("%d\n", maxArea(a, 9));

    int b[4];
    b[0] = 1;
    b[1] = 2;
    b[2] = 4;
    b[3] = 3;
    printf("%d\n", maxArea(b, 4));

    return 0;
}